ABSTRACT: Animal movements are often defined using the home range concept. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Within the environment, one of the key factors influencing an animal’s range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animal’s spatial patterns. One of the best examples of this is that of golf courses. Some environmental modifications exhibited by some human altered environment can have positive effects on certain wildlife species by altering their movement patterns and foraging efforts. We analyzed data collected from 22 Gila Monsters Heloderma suspectum at a subsidized environment in Arizona from 2007 to 2013 and a non-subsidized environment. We performed both kernel density estimation and minimum convex polygons for comparability purposes. After adjusting for sex, number of fixes, and year, males in the subsidized environment had an average area of 15.9 ha while the females had an area of 5.9 ha. In the un-subsidized environment males had an average range of 38.8 ha while females had an area of 29.8 ha. This suggests that the home ranges may be smaller in subsidized environments than those of un-subsidized environments due to increases in available resources. There were also differences in home range overlap within and between sexes. In the subsidized population, there was very little male-male overlap with only two occurances, more female-female overlap and male-female overlap was increased. Male home ranges often overlapped several female home ranges. Gila Monsters may not have to invest in wide ranging foraging efforts as those populations of the un-subsidized environments.
Overview of the spatial ecology of Gila Monsters (Heloderma suspectum) at Stone Canyon Golf Club as a resource subsidized population vs. Owl Head Buttes representing the unsubsized natural population. For home range analyses and overlap, Minimum Convex Polygons (MCP) and Kernal Density Estimations (KDE) were used.

Compared home range sizes of Heloderma suspectum between two populations. One represented a subsidized population at Stone Canyon Golf Club and the other at Owl Head Buttes representing the unsubsidized population. Stone Canyon is located in Oro Valley on the north end of Tucson, Arizona. Owl Head Buttes is located about 17 km straight line distance north west from Stone Canyon. Data at Owl Head was collected from 2000 - 2002, while fixes were collected from 2007 - 2013 at Stone Canyon. We Calculated minimum convex polygons using both 95 percent and 100 percent of the locations for each lizard.
Summary of home range size.
Table 1. Pooled overall home ranges of Gila Monsters at Owl Head Buttes and Stone Canyon Golf Club. Both 100% and 95% MCPs were calculated between both populations.
Table: Table 1. Home range sizes of Stone Canyon and Owl head Buttes using both 95 percent and 100 percent MCPs.
Year Gila Sex Environment Home_Range_100mcp N100 Home_Range_95mcp N95
----- ----- ------- -------------- ------------------ ----- ----------------- ----
2000 1 female nonsubsidized 25.20 42 23.00 38
_ 2 male nonsubsidized 28.70 125 24.50 112
_ 3 male nonsubsidized 82.70 89 68.40 78
_ 4 male nonsubsidized 55.60 80 40.50 73
2001 1 female nonsubsidized 20.10 26 NA NA
_ 2 male nonsubsidized 23.50 10 NA NA
_ 3 male nonsubsidized 60.10 18 NA NA
_ 4 male nonsubsidized 24.40 21 NA NA
_ 10 male nonsubsidized 28.50 14 NA NA
_ 11 male nonsubsidized 10.60 22 NA NA
_ 12 male nonsubsidized 23.60 7 NA NA
_ 13 female nonsubsidized 8.90 9 NA NA
_ 15 female nonsubsidized 13.00 11 NA NA
_ 50 female nonsubsidized 21.00 11 NA NA
_ 51 female nonsubsidized 7.10 8 NA NA
2002 2 male nonsubsidized 66.20 38 40.00 37
_ 4 male nonsubsidized 73.10 76 55.50 73
_ 10 male nonsubsidized 39.50 111 33.30 105
_ 11 male nonsubsidized 39.30 92 31.90 88
_ 12 male nonsubsidized 49.50 66 41.50 63
_ 13 female nonsubsidized 26.30 101 23.70 96
_ 15 female nonsubsidized 39.20 98 21.30 94
_ 17 female nonsubsidized 47.60 106 29.10 101
_ 50 female nonsubsidized 15.80 68 14.10 66
_ 51 female nonsubsidized 18.50 57 12.40 57
2007 F104 female subsidized 3.37 18 3.37 19
_ F114 female subsidized 2.51 8 0.58 7
_ F36 female subsidized 5.05 20 3.49 19
_ F66 female subsidized 10.23 22 5.56 20
_ M112 male subsidized 12.51 13 12.51 12
_ M14 male subsidized 4.66 15 3.87 14
2008 F104 female subsidized 4.97 53 3.47 50
_ F114 female subsidized 11.96 52 9.38 49
_ F135 female subsidized 4.07 16 1.58 15
_ F137 female subsidized 5.98 15 5.75 14
_ F36 female subsidized 9.73 54 7.55 51
_ F66 female subsidized 11.29 51 9.95 48
_ M119 male subsidized 25.01 58 20.23 55
2009 F104 female subsidized 7.45 64 7.25 62
_ F114 female subsidized 11.46 52 8.28 49
_ F135 female subsidized 6.21 62 5.47 58
_ F137 female subsidized 6.09 35 5.68 33
_ F147 female subsidized 17.90 50 14.04 48
_ F36 female subsidized 7.48 62 5.83 60
_ F66 female subsidized 12.20 67 11.01 66
_ M112 female subsidized 7.89 71 1.73 70
_ M119 male subsidized 22.62 18 16.37 16
_ M69 male subsidized 1.91 69 1.91 69
_ F146 male subsidized 10.01 20 8.49 17
2010 F114 female subsidized 9.65 44 8.30 41
_ F137 female subsidized 6.32 45 5.26 42
_ F147 female subsidized 16.65 36 14.75 34
_ F200 female subsidized 5.36 34 5.23 33
_ F214 female subsidized 7.38 27 3.01 25
_ F36 female subsidized 38.81 50 12.16 47
_ F66 female subsidized 28.96 52 16.22 49
_ M112 male subsidized 20.46 26 14.41 24
_ M119 male subsidized 17.46 31 9.70 29
_ M69 male subsidized 13.85 30 10.75 28
2011 F114 female subsidized 5.91 22 3.30 20
_ F137 female subsidized 4.80 33 4.28 31
_ F147 female subsidized 19.44 24 12.90 22
_ F200 female subsidized 8.35 28 7.66 27
_ F214 female subsidized 6.61 22 5.66 21
_ F252 female subsidized 3.09 17 1.60 16
_ F36 female subsidized 11.93 23 10.95 21
_ F66 female subsidized 5.72 5 0.66 4
_ M14 male subsidized 4.48 13 3.84 12
_ M215 male subsidized 11.47 16 11.47 15
_ M255 male subsidized 5.85 16 5.59 15
2012 F114 female subsidized 10.17 54 7.15 51
_ F137 female subsidized 2.06 13 1.36 12
_ F147 female subsidized 17.64 52 16.75 49
_ F252 female subsidized 5.19 53 3.63 50
_ F36 female subsidized 10.34 52 10.30 49
_ M14 male subsidized 4.42 13 3.77 12
_ M215 male subsidized 11.04 21 9.85 20
_ M255 male subsidized 8.21 13 5.39 12
2013 F114 female subsidized 1.16 7 0.28 6
_ F147 female subsidized 0.31 6 0.00 5
_ F252 female subsidized NA 4 NA NA
_ F36 female subsidized 0.13 6 0.00 5
Gila Monster Home Range Sizes at Stone Canyon vs. Owl Head Buttes.

Figure 1. Non-Subsidized (Owl Head Buttes) vs. Subsidized (Stone Canyon) population 100% MCPs by number of fixes across the whole study interval.
Raw Means of Overall Home Range by Sex.
Table 2. Group home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Table: Group Means of Overall Home Ranges at Stone Canyon and Owl Head Buttes
Environment Sex N Home_Range_100mcp sd se ci
-------------- ------- --- ------------------ ---------- --------- ----------
nonsubsidized female 11 22.063636 12.287414 3.704795 8.254797
nonsubsidized male 14 43.235714 21.672372 5.792185 12.513255
subsidized female 37 9.836757 6.984007 1.148164 2.328584
subsidized male 16 11.707500 6.907877 1.726969 3.680948

Figure 2. Raw overall mean home ranges between environment and sex.
Repeated measures ANOVA for Yearly Home Ranges by Sex.
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Year + Sex + N100 + (1 | Gila)
Data: year
REML criterion at convergence: 577.8
Scaled residuals:
Min 1Q Median 3Q Max
-2.5420 -0.4986 -0.0440 0.3136 3.3059
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 44.15 6.645
Residual 82.76 9.097
Number of obs: 78, groups: Gila, 30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -1320.5569 1743.0462 67.1206 -0.758 0.45133
Environmentsubsidized -23.5664 8.1679 72.9985 -2.885 0.00514 **
Year 0.6688 0.8710 67.1222 0.768 0.44527
Sexmale 10.0308 3.1991 32.6172 3.136 0.00362 **
N100 0.1958 0.0418 55.1173 4.685 1.88e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Envrnm Year Sexmal
Envrnmntsbs 0.902
Year -1.000 -0.903
Sexmale -0.040 0.036 0.039
N100 0.064 0.163 -0.065 0.051
Directional means of home range using the least square means based on sex between Stone Canyon and Owl Head Buttes.

Figure 3. Adjusted means of home ranges between environment and sex. Adjusted for sample size, year and sex.
Post-Hoc comparisons between sexes:
Sex = female:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 23.6 8.31 73 2.836 0.0059
Sex = male:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 23.6 8.31 73 2.836 0.0059
Graphical Comparisons of Sex between the two populatins:

Table 3. Direction means of home range after being adjusted for year, sex and sample size.
Table: Adjusted Means of Male vs. Female home ranges at Stone Canyon and Owl Head Buttes.
Sex Environment lsmean SE df lower.CL upper.CL
------- -------------- ---------- --------- --------- ----------- ---------
female nonsubsidized 29.612721 5.987412 72.46937 17.6783538 41.54709
male nonsubsidized 39.643485 6.029813 71.14839 27.6208143 51.66616
female subsidized 6.046318 3.444012 52.60294 -0.8627133 12.95535
male subsidized 16.077082 3.774266 57.13328 8.5196265 23.63454
Seasonal Home Range.
Home range analysis broken down by five seasons; Emergence, Dry, Monsoon, Post Monsoon. The start of emergence was defined by when movement patterns increased from none/minimal to the start of high activity. Effort was taken to match as closely as possible to the Owl Head Buttes emergence date interval. Monsoon season was adjusted using NOAA climate data. The start of was defined when the mean dew point temperatures of three consecutive days were greater than 55 degrees.
Scaling home range analyses by seasonal estimates reduces the number or locations for each lizard. 100 percent MCPs were used for seasonal home range analyses to avoid any further reduction of locations for each estimation.
Table 4. Raw group means of home ranges grouped by environment season.
Table: Raw Group Means of Seasonal Home Ranges at Stone Canyon
Environment Season N Home_Range_100mcp sd se ci
-------------- ------------- --- ------------------ ---------- ---------- ---------
nonsubsidized Dry 12 23.7166667 12.841682 3.7070742 8.159215
nonsubsidized Emergence 10 2.8100000 3.121414 0.9870776 2.232925
nonsubsidized Monsoon 13 23.6538462 9.446482 2.6199828 5.708452
nonsubsidized Post_Monsoon 11 0.6909091 1.013365 0.3055411 0.680788
subsidized Dry 17 13.0364706 10.574940 2.5647997 5.437133
subsidized Emergence 9 2.0977778 1.649566 0.5498555 1.267969
subsidized Monsoon 18 10.5600000 7.518662 1.7721657 3.738943
subsidized Post_Monsoon 14 2.9885714 5.044404 1.3481737 2.912552

Figure 4. Raw seasonal home range means grouped by environment and sex. Both the non-subsidized and subsidized populations follow similar patterns, but with the subsidized means less than those of the non-subsidized population.
Repeated measures ANOVA for Seasons.
Table 5. Adjusted seasonal means of home range between the non-subsidized and subsidized populations. The emergence and post-monsoon season between the two populations show similar home range sizes. Differences in home range sizes between the two populations is during the dry and monsoon seasons.
Table: Adjusted Seasonal Means of Home Ranges at Stone Canyon and Owl Head Buttes.
Season Environment N.Individuals lsmean SE df lower.CL upper.CL
------------- -------------- -------------- ------- ----- --- --------- ---------
Emergence nonsubsidized 9 2.81 2.52 96 -2.19 7.81
Dry nonsubsidized 12 23.72 2.30 96 19.15 28.28
Monsoon nonsubsidized 13 23.65 2.21 96 19.27 28.04
Post_Monsoon nonsubsidized 11 0.69 2.40 96 -4.07 5.46
Emergence subsidized 9 2.10 2.65 96 -3.17 7.37
Dry subsidized 17 13.04 1.93 96 9.20 16.87
Monsoon subsidized 18 10.56 1.88 96 6.83 14.29
Post_Monsoon subsidized 14 2.99 2.13 96 -1.24 7.21
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Season + Sex + N + (1 | Gila)
Data: seasonal
REML criterion at convergence: 670.6
Scaled residuals:
Min 1Q Median 3Q Max
-1.6904 -0.7191 -0.2474 0.4440 2.9426
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 3.386 1.840
Residual 54.719 7.397
Number of obs: 100, groups: Gila, 30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 14.97953 2.65399 62.37621 5.644 4.34e-07 ***
Environmentsubsidized -4.83481 1.69122 23.36346 -2.859 0.0088 **
SeasonEmergence -12.28159 2.42349 85.56625 -5.068 2.29e-06 ***
SeasonMonsoon -0.60215 1.96764 66.24482 -0.306 0.7605
SeasonPost_Monsoon -11.74341 2.36522 86.89224 -4.965 3.40e-06 ***
Sexmale 1.69188 1.77127 26.24662 0.955 0.3482
N 0.07933 0.04154 77.63737 1.910 0.0599 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Envrnm SsnEmr SsnMns SsnP_M Sexmal
Envrnmntsbs -0.443
SeasnEmrgnc -0.605 0.089
SeasonMonsn -0.365 0.019 0.413
SsnPst_Mnsn -0.654 0.031 0.537 0.417
Sexmale -0.520 0.175 0.125 -0.027 0.170
N -0.655 -0.007 0.380 -0.044 0.472 0.306

Figure 5. Adjusted seasonal home ranges between the two populations after being adjusted for season, sex and sample size by RMANOVA.
Table 6. Mean individual seasoanl home ranges pooled from the entire study period. Missing values are depicted where no locations for that animal during that period were successfull.
Table: Seasonal Individual Home Ranges.
X Emergence X.1 X.2 Dry X.3 Monsoon X.4 Post.Monsoon X.5
------- ---------- ---------- ------ ------ ------ -------- ------- ------------- ------
Lizard Sex Area (ha) N Area N Area N Area N
M69 Male 0.33 4.00 36.73 24.00 14.84 22.00 0.07 8.00
M67 Male NA NA 5.71 9.00 7.72 7.00 NA NA
M255 Male 3.23 7.00 NA NA 1.07 9.00 NA NA
M215 Male 2.64 7.00 8.28 11.00 7.22 12.00 NA NA
M14 Male NA NA 6.20 15.00 7.50 10.00 NA NA
M119 Male NA NA 27.84 17.00 19.98 67.00 1.55 9.00
M112 Male NA NA 24.93 16.00 14.14 29.00 0.28 8.00
F66 Female 0.33 5.00 9.60 97.00 33.65 79.00 1.36 16.00
F36 Female 2.94 12.00 24.99 99.00 10.30 118.00 19.14 27.00
F252 Female 1.27 8.00 2.54 14.00 6.48 30.00 0.39 9.00
F214 Female NA NA 5.04 10.00 7.79 28.00 1.87 9.00
F200 Female NA NA 4.71 8.00 4.23 40.00 2.05 12.00
F147 Female 5.44 14.00 25.52 57.00 18.21 70.00 7.14 18.00
F146 Female NA NA 9.55 22.00 5.97 17.00 0.03 7.00
F137 Female 1.71 6.00 6.54 43.00 6.95 62.00 2.19 17.00
F135 Female NA N 3.71 25.00 5.72 48.00 0.68 5.00
F114 Female 0.99 12.00 13.66 99.00 10.72 84.00 4.56 24.00
F104 Female NA NA 6.07 70.00 7.59 49.00 0.53 13.00
Means Overall 1.89 13.04 10.56 2.99
Male 2.07 18.28 10.35 0.63
Female 2.11 10.18 10.69 3.63
Gila Monster Home Range Overlap of 100% MCPs.
Figure 4. Home Range overlap by sex of 100% MCPs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.
The Stone Canyon population seems to exhibit greater female-female overlap as well as considerable overlap of male-female home ranges. There appears to be limited male-male overlap, with occurance happening in only two male-male home range polygons. This finding is in contrast to the Owl Head buttes study which revealed that there was a large degree of overlap among male-female and male-male overlaps (Table 4). Gillardo concluded that, in their study, the high degree of overlap in males-males interactions may be due to having larger home ranges for mate searching activities. Males may have and increased home range size to maximize their access to multiple females. She concluded that the lack of female-female overlap may be due to smaller home range sizes.
At Stone Canyon, males have reduced home range sizes (Table 2; Fig. 2). However, males still retain home range overlap with multiple females while having reduced contact with other males. This may be in response to nutrient subsidies that reduce the need to have expanded home range sizes for foraging activities for both males and females. There may also be a higher density of females as a response to resource availability and reduced range requirements. Males are not forced to expand home ranges for mate searching to the extant that individuals at Owl Head Buttes may be subject to.
Table 4. Home range overlap of Gila Monsters at the nutrient subsidized site. Male-male overlaps only occured between two pairs of males: M14-M69 and M119-M215 at 0.5 ha. and 19.5 ha. respectively and were therefore not included in the table.
Table: Home range overlap of Stone Canyon Gila Monsters using 100% MCPs.
ID F36 F66 F104 F135 F137 F146 F147 X M14 M67 M69 M112 M119 M215 M255
-------------- ----------- ----- ----- ----- ----- ----- ----- ------------ ------------ ----- ----- ------ ------ ------ -----
Female:Female Male:Female
F36 _ 5.13 _ _ _ 4.65 _ _ _ _ _ 19.44 18.51 _
F66 5.13 _ _ _ _ 5.05 _ _ _ 2.6 _ _ _ _
F104 _ _ _ 0.5 _ _ _ _ _ _ _ _ _
F114 _ _ _ _ _ _ _ _ _ _ 5.82 _ _ _
F135 _ _ 0.5 _ 2.89 _ 3.94 _ _ 2.04 _ _ _ _
F137 _ _ _ 2.89 _ _ 7.91 _ _ 0.55 _ _ _ _
F146 4.65 5.05 _ _ _ _ _ 0.14 _ 0.76 _ _ _ _
F147 _ _ _ 3.94 7.91 _ _ 3.73 0.21 4.6 _ _ _ _
F200 _ _ _ _ _ _ _ _ _ _ 6.49 _ _ _
F252 _ _ _ _ _ _ _ _ _ _ _ _ _ 3.45
Mean = 4.3 ± 0.86 Mean = 5.26 ± 1.78
ID F36 F66 F104 F135 F137 F146 F147 M14 M67 M69 M112 M119 M215 M255
Female:Female Male:Female
Net 6.84 7.25 0.5 4.44 7.91 6.77 8.96 3.87 0.21 8.57 12.31 21.24 20.32 3.45
Prportion 0.2 0.2 0.1 0.5 1 0.7 0.3 0.4 0.02 0.5 0.4 0.6 1 0.2
Gila Monster Home Range Shifts of 100% MCPs.


Gila Monster Proportion of Refuge Use.
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AVG_PROP_YR_LIZ ~ COVERTYPE + SEASON + SEX + YEAR + COVERTYPE *
SEASON + (1 | LIZARDNUMBER)
Data: Refugia
REML criterion at convergence: -153
Scaled residuals:
Min 1Q Median 3Q Max
-1.7127 -0.6226 -0.1802 0.5562 3.5758
Random effects:
Groups Name Variance Std.Dev.
LIZARDNUMBER (Intercept) 0.0002518 0.01587
Residual 0.0154691 0.12437
Number of obs: 158, groups: LIZARDNUMBER, 21
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -7.700460 14.076150 32.071409 -0.547 0.588126
COVERTYPEMidden -0.020036 0.051328 133.473533 -0.390 0.696892
COVERTYPERocks -0.063939 0.042135 126.493669 -1.517 0.131640
SEASONEmergence -0.133105 0.047284 139.729056 -2.815 0.005583 **
SEASONMonsoon -0.043444 0.042209 129.438281 -1.029 0.305277
SEASONPost-Monsoon -0.060754 0.042217 128.072266 -1.439 0.152566
SEXMale 0.055117 0.022639 13.273789 2.435 0.029725 *
YEAR 0.003946 0.007008 32.081783 0.563 0.577293
COVERTYPERocks:SEASONEmergence 0.239451 0.068673 130.604344 3.487 0.000666 ***
COVERTYPEMidden:SEASONMonsoon 0.042844 0.067202 127.927256 0.638 0.524914
COVERTYPERocks:SEASONMonsoon 0.066350 0.059018 126.524094 1.124 0.263041
COVERTYPEMidden:SEASONPost-Monsoon -0.075480 0.082151 132.158201 -0.919 0.359879
COVERTYPERocks:SEASONPost-Monsoon 0.033366 0.059934 124.298904 0.557 0.578723
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
fit warnings:
fixed-effect model matrix is rank deficient so dropping 1 column / coefficient
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
COVERTYPE 0.017928 0.008964 2 132.711 0.5795 0.56160
SEASON 0.105661 0.035220 3 138.017 2.2768 0.08243 .
SEX 0.091693 0.091693 1 13.274 5.9275 0.02972 *
YEAR 0.004905 0.004905 1 32.082 0.3171 0.57729
COVERTYPE:SEASON 0.238481 0.047696 5 128.651 3.0833 0.01159 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
There was no effect of year on refuge use. Performed Mixed Effects RMANOVA for each refuge type, then conducted pairwise comparisons for each refuge type across seasons. For post-hoc pariwise comparisons, used Bonferonni adjusted p-value.
Run RMANOVA for each refuge type and pairwise comparisons across each season:
Rocks
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: SEAS_PROP_LIZ ~ SEASON + SEX + SEASON * SEX + (1 | LIZARDNUMBER)
Data: Rocks
REML criterion at convergence: -103.8
Scaled residuals:
Min 1Q Median 3Q Max
-1.55487 -0.58207 -0.05309 0.52233 2.05627
Random effects:
Groups Name Variance Std.Dev.
LIZARDNUMBER (Intercept) 0.003287 0.05733
Residual 0.004596 0.06780
Number of obs: 63, groups: LIZARDNUMBER, 20
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 0.1316008 0.0274521 42.7537594 4.794 2e-05 ***
SEASONEmergence -0.1036536 0.0346126 37.5673742 -2.995 0.00484 **
SEASONMonsoon 0.0300659 0.0293719 35.7211388 1.024 0.31289
SEASONPost-Monsoon -0.0669273 0.0302162 36.5544335 -2.215 0.03308 *
SEXMale 0.0236997 0.0430740 41.4518910 0.550 0.58513
SEASONEmergence:SEXMale 0.1220126 0.0673303 38.7530731 1.812 0.07772 .
SEASONMonsoon:SEXMale -0.0003664 0.0461313 36.2245830 -0.008 0.99371
SEASONPost-Monsoon:SEXMale 0.0433949 0.0486611 36.0738584 0.892 0.37842
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) SEASONEm SEASONMn SEASONPs-M SEXMal SEASONE: SEASONM:
SEASONEmrgn -0.502
SEASONMonsn -0.595 0.469
SEASONPst-M -0.581 0.468 0.543
SEXMale -0.637 0.320 0.379 0.371
SEASONE:SEX 0.258 -0.514 -0.241 -0.241 -0.391
SEASONM:SEX 0.379 -0.299 -0.637 -0.346 -0.589 0.365
SEASONP-M:S 0.361 -0.291 -0.337 -0.621 -0.543 0.360 0.507
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
SEASON 0.054242 0.018081 3 37.289 3.9337 0.01556 *
SEX 0.017170 0.017170 1 18.228 3.7355 0.06896 .
SEASON:SEX 0.019296 0.006432 3 37.289 1.3994 0.25820
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Pairwise comparisons using t tests with pooled SD
data: AVG_PROP_YR_LIZ and SEASON
Dry Emergence Monsoon
Emergence 0.51 - -
Monsoon 1.00 0.99 -
Post-Monsoon 1.00 0.17 1.00
P value adjustment method: bonferroni
Burrow
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: SEAS_PROP_LIZ ~ SEASON + SEX + SEASON * SEX + (1 | LIZARDNUMBER)
Data: Burrow
REML criterion at convergence: -119
Scaled residuals:
Min 1Q Median 3Q Max
-1.9838 -0.5150 -0.1694 0.4066 4.6576
Random effects:
Groups Name Variance Std.Dev.
LIZARDNUMBER (Intercept) 0.000000 0.00000
Residual 0.005444 0.07378
Number of obs: 65, groups: LIZARDNUMBER, 21
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 0.14400 0.02333 57.00000 6.172 7.51e-08 ***
SEASONEmergence -0.11150 0.03500 57.00000 -3.186 0.00234 **
SEASONMonsoon 0.04236 0.03224 57.00000 1.314 0.19406
SEASONPost-Monsoon -0.02855 0.03224 57.00000 -0.885 0.37961
SEXMale 0.03100 0.03500 57.00000 0.886 0.37945
SEASONEmergence:SEXMale -0.00550 0.05472 57.00000 -0.101 0.92029
SEASONMonsoon:SEXMale -0.07570 0.05125 57.00000 -1.477 0.14520
SEASONPost-Monsoon:SEXMale -0.06646 0.05125 57.00000 -1.297 0.20000
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) SEASONEm SEASONMn SEASONPs-M SEXMal SEASONE: SEASONM:
SEASONEmrgn -0.667
SEASONMonsn -0.724 0.482
SEASONPst-M -0.724 0.482 0.524
SEXMale -0.667 0.444 0.482 0.482
SEASONE:SEX 0.426 -0.640 -0.309 -0.309 -0.640
SEASONM:SEX 0.455 -0.303 -0.629 -0.329 -0.683 0.437
SEASONP-M:S 0.455 -0.303 -0.329 -0.629 -0.683 0.437 0.466
convergence code: 0
boundary (singular) fit: see ?isSingular
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
SEASON 0.134062 0.044687 3 57 8.2093 0.0001249 ***
SEX 0.000525 0.000525 1 57 0.0965 0.7572312
SEASON:SEX 0.018319 0.006106 3 57 1.1217 0.3479249
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Pairwise comparisons using t tests with pooled SD
data: AVG_PROP_YR_LIZ and SEASON
Dry Emergence Monsoon
Emergence 0.038 - -
Monsoon 1.000 0.493 -
Post-Monsoon 0.809 0.999 1.000
P value adjustment method: bonferroni
Midden
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: SEAS_PROP_LIZ ~ SEASON + SEX + SEASON * SEX + (1 | LIZARDNUMBER)
Data: Midden
REML criterion at convergence: -33.5
Scaled residuals:
Min 1Q Median 3Q Max
-1.6646 -0.6384 -0.1226 0.4586 1.9445
Random effects:
Groups Name Variance Std.Dev.
LIZARDNUMBER (Intercept) 0.0001205 0.01098
Residual 0.0107199 0.10354
Number of obs: 30, groups: LIZARDNUMBER, 17
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 0.19641 0.04250 24.99991 4.621 9.95e-05 ***
SEASONMonsoon -0.01060 0.05467 15.75945 -0.194 0.8487
SEASONPost-Monsoon -0.16835 0.06285 17.87443 -2.678 0.0154 *
SEXMale -0.12614 0.07362 24.99990 -1.713 0.0990 .
SEASONMonsoon:SEXMale 0.14462 0.09009 16.50796 1.605 0.1274
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) SEASONMn SEASONP SEXMal
SEASONMonsn -0.773
SEASONPst-M -0.672 0.523
SEXMale -0.577 0.446 0.388
SEASONM:SEX 0.469 -0.607 -0.317 -0.813
fit warnings:
fixed-effect model matrix is rank deficient so dropping 1 column / coefficient
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
SEASON 0.124380 0.062190 2 16.453 5.8014 0.0124 *
SEX 0.015098 0.015098 1 16.585 1.4084 0.2520
SEASON:SEX 0.027624 0.027624 1 16.508 2.5769 0.1274
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Pairwise comparisons using t tests with pooled SD
data: AVG_PROP_YR_LIZ and SEASON
Dry Monsoon
Monsoon 1.000 -
Post-Monsoon 0.051 0.018
P value adjustment method: bonferroni
Analyses suggests that there is an effect of season across all three refuge types, but there is no interaction of sex and season on chosen refuge types (Tables 5-7). After performing post-hoc pairwise comparisons, the proportion of refuge use for rocks was higher in emergence (0.37). This may be due to Gila Monsters prefering more rocky refugia for hibernacula use. However, lizards used rocky refugia in smaller proportions throught the dry, monsoon and post-monsoon seasons(Table 5). During the dry season Gila Monsters exhibited a higher proportion of refuge use in burrows (0.26), but mainted about the same of burrow use throug the monsoon season (Table 6.). Gila Monsters chose midden refuge types in dry and monsoon seasons (0.21 and 0.23 respectively), with the majority midden selection in the monsoon. However, both the burrow and midden refuge types were both used throughtout the dry and monsoon seasons.
Table 5. Mean proportinal use of refuge types across easch season by sex.
Table: Refuge Use Proportional Means by Sex and Season
Refuge.Type X Emergence Dry Monsoon Post_Monsoon
------------ ------- ---------- ----- -------- -------------
Rock NA NA NA NA
Male 0.50 0.20 0.25 0.27
Female 0.23 0.18 0.19 0.11
Mean 0.37 0.19 0.22 0.19
NA NA NA NA
Burrow NA NA NA NA
Male 0.19 0.28 0.16 0.23
Female 0.08 0.23 0.23 0.16
Mean 0.14 0.26 0.20 0.20
NA NA NA NA
Midden NA NA NA NA
Male 0.00 0.17 0.25 0.00
Female 0.00 0.24 0.21 0.07
Mean 0.00 0.21 0.23 0.04
Table 6. Post-Hoc pairwise comparisons of refuge types between seasons.
Table: Post Hoc Pairwise Comparisons of Refuge Types
Refuge.Type Seasonal.Comparisons P.Value
------------ ----------------------- --------
Rock
Emergence:Dry 0.68
Emergence:Monsoon 0.12
Emergence:Post Monsoon 0.99
Dry:Monsoon 0.36
Dry:Post Monsoon 0.35
Monsoon:Post Monsoon 0.009*
Burrow
Emergence:Dry 0.001*
Emergence:Monsoon 0.0006*
Emergence:Post Monsoon 0.23
Dry:Monsoon 0.99
Dry:Post Monsoon 0.12
Monsoon:Post Monsoon 0.07
Midden
Emergence:Dry NA
Emergence:Monsoon NA
Emergence:Post Monsoon NA
Dry:Monsoon 0.39
Dry:Post Monsoon NA
Monsoon:Post Monsoon NA
Table 7. ANOVA table after conducting Mixed Effects RMANOVA for each refuge type across seasons.
Table: ANOVA Table of RM Analysis for Refuge Use
X Effect DF F Pr..F.
------- ----------- --- ----- --------
Rock NA NA
Season 3 4.24 0.01*
Sex 1 3.04 0.09
Sex:Season 3 1.54 0.22
NA NA
Burrow NA NA
Season 3 8.04 0.0001*
Sex 1 0.16 0.68
Sex:Season 3 0.97 0.41
NA NA
Midden NA NA
Season 2 5.81 0.01*
Sex 1 1.41 0.25
Sex:Season 1 2.58 0.12
LS0tCnRpdGxlOiAiU3BhdGlhbCBFY29sb2d5IEdpbGEgTW9uc3RlcnMgaW4gYSBSZXNvdXJjZSBTdWJzaWRpemVkIEVudmlyb25tZW50IgphdXRob3I6ICJNLiBQaWVyc29uIgpkYXRlOiAiMjggQXVndXN0IDIwMTkiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgZmlnX2NhcHRpb246IHllcwogIG51bWJlcl9zZWN0aW9uczogeWVzCi0tLQoKQUJTVFJBQ1Q6CkFuaW1hbCBtb3ZlbWVudHMgYXJlIG9mdGVuIGRlZmluZWQgdXNpbmcgdGhlIGhvbWUgcmFuZ2UgY29uY2VwdC4gQ29uc2VxdWVudGx5LCBob21lIHJhbmdlcyBhcmUgZGV0ZXJtaW5lZCBieSB0ZW1wb3JhbCwgc3BhdGlhbCwgYW5kIGluZGl2aWR1YWwtbGV2ZWwgcHJvY2Vzc2VzLiBXaXRoaW4gdGhlIGVudmlyb25tZW50LCBvbmUgb2YgdGhlIGtleSBmYWN0b3JzIGluZmx1ZW5jaW5nIGFuIGFuaW1hbOKAmXMgcmFuZ2UgYW5kIGhvdyBpdCB1c2VzIHRoZSBlbnZpcm9ubWVudCBpcyB0aGF0IG9mIHJlc291cmNlcy4gIEFsdGVyYXRpb25zIHRvIHRoZSBlbnZpcm9ubWVudCB0aGF0IGFmZmVjdCByZXNvdXJjZSBkaXN0cmlidXRpb24gYW5kIGF2YWlsYWJpbGl0eSBjYW4gaGF2ZSBwcm9mb3VuZCBjb25zZXF1ZW5jZXMgb24gYW4gYW5pbWFs4oCZcyBzcGF0aWFsIHBhdHRlcm5zLiBPbmUgb2YgdGhlIGJlc3QgZXhhbXBsZXMgb2YgdGhpcyBpcyB0aGF0IG9mIGdvbGYgY291cnNlcy4gIFNvbWUgZW52aXJvbm1lbnRhbCBtb2RpZmljYXRpb25zIGV4aGliaXRlZCBieSBzb21lIGh1bWFuIGFsdGVyZWQgZW52aXJvbm1lbnQgY2FuIGhhdmUgcG9zaXRpdmUgZWZmZWN0cyBvbiBjZXJ0YWluIHdpbGRsaWZlIHNwZWNpZXMgYnkgYWx0ZXJpbmcgdGhlaXIgbW92ZW1lbnQgcGF0dGVybnMgYW5kIGZvcmFnaW5nIGVmZm9ydHMuICBXZSBhbmFseXplZCBkYXRhIGNvbGxlY3RlZCBmcm9tIDIyIEdpbGEgTW9uc3RlcnMgSGVsb2Rlcm1hIHN1c3BlY3R1bSBhdCBhIHN1YnNpZGl6ZWQgZW52aXJvbm1lbnQgaW4gQXJpem9uYSBmcm9tIDIwMDcgdG8gMjAxMyBhbmQgYSBub24tc3Vic2lkaXplZCBlbnZpcm9ubWVudC4gIFdlIHBlcmZvcm1lZCBib3RoIGtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gYW5kIG1pbmltdW0gY29udmV4IHBvbHlnb25zIGZvciBjb21wYXJhYmlsaXR5IHB1cnBvc2VzLiAgQWZ0ZXIgYWRqdXN0aW5nIGZvciBzZXgsIG51bWJlciBvZiBmaXhlcywgYW5kIHllYXIsIG1hbGVzIGluIHRoZSBzdWJzaWRpemVkIGVudmlyb25tZW50IGhhZCBhbiBhdmVyYWdlIGFyZWEgb2YgMTUuOSBoYSB3aGlsZSB0aGUgZmVtYWxlcyBoYWQgYW4gYXJlYSBvZiA1LjkgaGEuICBJbiB0aGUgdW4tc3Vic2lkaXplZCBlbnZpcm9ubWVudCBtYWxlcyBoYWQgYW4gYXZlcmFnZSByYW5nZSBvZiAzOC44IGhhIHdoaWxlIGZlbWFsZXMgaGFkIGFuIGFyZWEgb2YgMjkuOCBoYS4gIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaG9tZSByYW5nZXMgbWF5IGJlIHNtYWxsZXIgaW4gc3Vic2lkaXplZCBlbnZpcm9ubWVudHMgdGhhbiB0aG9zZSBvZiB1bi1zdWJzaWRpemVkIGVudmlyb25tZW50cyBkdWUgdG8gaW5jcmVhc2VzIGluIGF2YWlsYWJsZSByZXNvdXJjZXMuIFRoZXJlIHdlcmUgYWxzbyBkaWZmZXJlbmNlcyBpbiBob21lIHJhbmdlIG92ZXJsYXAgd2l0aGluIGFuZCBiZXR3ZWVuIHNleGVzLiBJbiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uLCB0aGVyZSB3YXMgdmVyeSBsaXR0bGUgbWFsZS1tYWxlIG92ZXJsYXAgd2l0aCBvbmx5IHR3byBvY2N1cmFuY2VzLCBtb3JlIGZlbWFsZS1mZW1hbGUgb3ZlcmxhcCBhbmQgbWFsZS1mZW1hbGUgb3ZlcmxhcCB3YXMgaW5jcmVhc2VkLiBNYWxlIGhvbWUgcmFuZ2VzIG9mdGVuIG92ZXJsYXBwZWQgc2V2ZXJhbCBmZW1hbGUgaG9tZSByYW5nZXMuIEdpbGEgTW9uc3RlcnMgbWF5IG5vdCBoYXZlIHRvIGludmVzdCBpbiB3aWRlIHJhbmdpbmcgZm9yYWdpbmcgZWZmb3J0cyBhcyB0aG9zZSBwb3B1bGF0aW9ucyBvZiB0aGUgdW4tc3Vic2lkaXplZCBlbnZpcm9ubWVudHMuICAKCgpPdmVydmlldyBvZiB0aGUgc3BhdGlhbCBlY29sb2d5IG9mIEdpbGEgTW9uc3RlcnMgKCpIZWxvZGVybWEgc3VzcGVjdHVtKikgYXQgU3RvbmUgQ2FueW9uIEdvbGYgQ2x1YiBhcyBhIHJlc291cmNlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbiB2cy4gT3dsIEhlYWQgQnV0dGVzIHJlcHJlc2VudGluZyB0aGUgdW5zdWJzaXplZCBuYXR1cmFsIHBvcHVsYXRpb24uIEZvciBob21lIHJhbmdlIGFuYWx5c2VzIGFuZCBvdmVybGFwLCBNaW5pbXVtIENvbnZleCBQb2x5Z29ucyAoTUNQKSBhbmQgS2VybmFsIERlbnNpdHkgRXN0aW1hdGlvbnMgKEtERSkgd2VyZSB1c2VkLgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgTE9BRCBQQUNLQUdFUyAKCmxpYnJhcnkodGlkeXZlcnNlKSAKbGlicmFyeShrbml0cikgIyAgbWFrZSB0YWJsZXMKbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ2ZvcnRpZnkpCmxpYnJhcnkob3JkaW5hbCkKbGlicmFyeShsc21lYW5zKQpsaWJyYXJ5KGdnbWFwKQpsaWJyYXJ5KGdnc24pCiNrbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEvMykgI2ZvcmNlIGZpZ3VyZXMgdG8gYmUgY2VydGFpbiBzaXplIGFuZCBhc3BlY3QgcmF0aW8KYGBgCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmdnbWFwOjpyZWdpc3Rlcl9nb29nbGUoa2V5ID0gIkFJemFTeUJqaGhFOXBlUkJtUzFoOVdZUXgxazVNRl9YQVhxVWZTcyIpCgpwMzwtIGdnbWFwKGdldF9nb29nbGVtYXAoY2VudGVyID0gYyhsb24gPSAtMTEwLjk5MDg4LCBsYXQgPSAzMi40Njg3OCksCiAgICAgICAgICAgICAgICAgICAgICAgICB6b29tID0gMTUsIHNjYWxlID0gMixtYXB0eXBlID0nc2F0ZWxsaXRlJyxhcmNoaXZpbmcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAnY29sb3InKSkKIyBwMwoKTG9uZ2l0dWRlPC1jKC0xMTAuOTc4LC0xMTAuOTc4LC0xMTAuOTgwLC0xMTAuOTgzLC0xMTAuOTg1LC0xMTAuOTg4LC0xMTAuOTkwLC0xMTAuOTk0LC0xMTAuOTk1LAogICAgICAgICAgICAgLTExMC45OTcsLTExMS4wMDMsLTExMS4wMDQsLTExMS4wMDQyLC0xMTEuMDAwLC0xMTAuOTk1LC0xMTAuOTg1LC0xMTAuOTc4LC0xMTAuOTgwKQoKTGF0aXR1ZGU8LWMoMzIuNDYzLDMyLjQ2MiwzMi40NjIsMzIuNDYxLDMyLjQ2MSwzMi40NjAsMzIuNDYyLDMyLjQ2NCwzMi40NjYsMzIuNDY4LDMyLjQ2OCwKICAgICAgICAgICAgMzIuNDY5LDMyLjQ3MywzMi40NzMzLDMyLjQ3MiwzMi40NzQsMzIuNDcxLDMyLjQ2NykKIApteWNvb3JkZGF0YSA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKExvbmdpdHVkZSxMYXRpdHVkZSkpCgojIGdnbWFwKHAzKSsKcDMrZ2VvbV9wb2x5Z29uKGRhdGE9bXljb29yZGRhdGEsYWVzKHg9TG9uZ2l0dWRlLHk9TGF0aXR1ZGUpLGFscGhhPTAuMixjb2xvdXI9InJlZCIsCiAgICAgICAgICAgICAgICBmaWxsPSJyZWQiKStnZW9tX3BhdGgoZGF0YT1teWNvb3JkZGF0YSxhZXMoeD1Mb25naXR1ZGUseT1MYXRpdHVkZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyPSJ3aGl0ZSIsYWxwaGE9MC40LHNpemU9MikrCiAgYW5ub3RhdGUoInRleHQiLCB4PS0xMTAuOTg5LHk9MzIuNDY4LGxhYmVsPSJTdG9uZSBDYW55b24gQ2x1YiIsY29sb3VyPSJ3aGl0ZSIsc2l6ZT0zKSsKICBzY2FsZWJhcih4Lm1pbiA9IC0xMTEuMDA1LCB4Lm1heCA9IC0xMTAuOTc1LAogICAgICAgICAgIHkubWluID0gMzIuNDU1LCB5Lm1heCA9IDMyLjQ4MCwgYW5jaG9yID0gTlVMTCwKICAgICAgICAgICBkaXN0ID0gNTAsIHRyYW5zZm9ybT1UUlVFLGRpc3RfdW5pdD0ibSIsIG1vZGVsID0gJ1dHUzg0JykrCiAgbGFicyh0aXRsZSA9ICJTQ0dDIFN0dWR5IFNpdGUgT3JvIFZhbGxleSBBcml6b25hIikKCj9zY2FsZWJhcigpCiMgYW5ub3RhdGUoInBvaW50Iix4PTcuMjU3ODg1LHk9NDYuNzkwNDksc2l6ZT03KQojIHAgKyBnZW9tX3BvaW50KGFlcyh4ID0gTG9uZ2l0dWRlLCB5ID0gTGF0aXR1ZGUsICBjb2xvdXIgPSBJbml0aWFsLlR5cGUuR3JvdXApLCBkYXRhID0gaTIsIHNpemUgPSAwLjUpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKQpgYGAKCgpDb21wYXJlZCBob21lIHJhbmdlIHNpemVzIG9mICpIZWxvZGVybWEgc3VzcGVjdHVtKiBiZXR3ZWVuIHR3byBwb3B1bGF0aW9ucy4gT25lIHJlcHJlc2VudGVkIGEgc3Vic2lkaXplZCBwb3B1bGF0aW9uIGF0IFN0b25lIENhbnlvbiBHb2xmIENsdWIgYW5kIHRoZSBvdGhlciBhdCBPd2wgSGVhZCBCdXR0ZXMgcmVwcmVzZW50aW5nIHRoZSB1bnN1YnNpZGl6ZWQgcG9wdWxhdGlvbi4gU3RvbmUgQ2FueW9uIGlzIGxvY2F0ZWQgaW4gT3JvIFZhbGxleSBvbiB0aGUgbm9ydGggZW5kIG9mIFR1Y3NvbiwgQXJpem9uYS4gIE93bCBIZWFkIEJ1dHRlcyBpcyBsb2NhdGVkIGFib3V0IDE3IGttIHN0cmFpZ2h0IGxpbmUgZGlzdGFuY2Ugbm9ydGggd2VzdCBmcm9tIFN0b25lIENhbnlvbi4gRGF0YSBhdCBPd2wgSGVhZCB3YXMgY29sbGVjdGVkIGZyb20gMjAwMCAtIDIwMDIsIHdoaWxlIGZpeGVzIHdlcmUgY29sbGVjdGVkIGZyb20gMjAwNyAtIDIwMTMgYXQgU3RvbmUgQ2FueW9uLiBXZSBDYWxjdWxhdGVkIG1pbmltdW0gY29udmV4IHBvbHlnb25zIHVzaW5nIGJvdGggOTUgcGVyY2VudCBhbmQgMTAwIHBlcmNlbnQgb2YgdGhlIGxvY2F0aW9ucyBmb3IgZWFjaCBsaXphcmQuCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+U3VtbWFyeSBvZiBob21lIHJhbmdlIHNpemUuPC9zcGFuPgoKVGFibGUgMS4gUG9vbGVkIG92ZXJhbGwgaG9tZSByYW5nZXMgb2YgR2lsYSBNb25zdGVycyBhdCBPd2wgSGVhZCBCdXR0ZXMgYW5kIFN0b25lIENhbnlvbiBHb2xmIENsdWIuIEJvdGggMTAwJSBhbmQgOTUlIE1DUHMgd2VyZSBjYWxjdWxhdGVkIGJldHdlZW4gYm90aCBwb3B1bGF0aW9ucy4gCmBgYHtyIEhvbWUgcmFuZ2Ugc2l6ZXMgb2YgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMgYnkgeWVhci4sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpHTV90YWJsZSA8LSByZWFkX2NzdigiR01fdGFibGUuY3N2IikKa2FibGUoR01fdGFibGUsZm9ybWF0PSJwYW5kb2MiLCBjYXB0aW9uPSdUYWJsZSAxLiBIb21lIHJhbmdlIHNpemVzIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIGhlYWQgQnV0dGVzIHVzaW5nIGJvdGggOTUgcGVyY2VudCBhbmQgMTAwIHBlcmNlbnQgTUNQcy4nKQoKYGBgCgoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPkdpbGEgTW9uc3RlciBIb21lIFJhbmdlIFNpemVzIGF0IFN0b25lIENhbnlvbiB2cy4gT3dsIEhlYWQgQnV0dGVzLjwvc3Bhbj4KCmBgYHtyIFN0b25lIENhbnlvbiBWcy4gT3dsIEhlYWQgQnV0dGVzLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KeWVhciA8LSByZWFkX2NzdigiR01fQ29uc29saWRhdGVkX0J5WWVhci5jc3YiKQoKIyBxdWljayBwbG90CkdyYXBoMTwtZ2dwbG90KHllYXIsYWVzKHg9TjEwMCx5PUhvbWVfUmFuZ2VfMTAwbWNwLGdyb3VwPUVudmlyb25tZW50KSkrCiAgZ2VvbV9wb2ludChhZXMoc2hhcGUgPSBmYWN0b3IoRW52aXJvbm1lbnQpKSwgc2l6ZSA9IDIpK2dlb21fc21vb3RoKG1ldGhvZD1sbSkrc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKHN1YnNpZGl6ZWQ9ImN5YW4zIixub25zdWJzaWRpemVkPSJpbmRpYW5yZWQxIikpK2xhYnModGl0bGUgPSAiMTAwJSBNQ1AgSG9tZSBSYW5nZXMiKSsKICB4bGFiKCJOdW1iZXIgb2YgUmVsb2NhdGlvbnMiKSt5bGFiKCJBcmVhIChoYSkgdXNpbmcgMTAwJSBNQ1AiKSsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLHNlPUZBTFNFKSsKICB0aGVtZV9idygpCgpHcmFwaDE8LUdyYXBoMSt0aGVtZShheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplID0gMTQpKQoKIyBsZWdlbmQgYXQgdG9wLWxlZnQsIGluc2lkZSB0aGUgcGxvdApHcmFwaDEgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCiMgZGlyLmNyZWF0ZSgib3V0cHV0cyIpICMgY3JlYXRlIGEgbmV3IGZvbGRlciB0byBob2xkIHRoZSBvdXRwdXQgZmlsZXMKIyBnZ3NhdmUoIm91dHB1dHMvU0NfT0hCX3Bsb3QucGRmIikKYGBgCkZpZ3VyZSAxLiBOb24tU3Vic2lkaXplZCAoT3dsIEhlYWQgQnV0dGVzKSB2cy4gU3Vic2lkaXplZCAoU3RvbmUgQ2FueW9uKSBwb3B1bGF0aW9uIDEwMCUgTUNQcyBieSBudW1iZXIgb2YgZml4ZXMgYWNyb3NzIHRoZSB3aG9sZSBzdHVkeSBpbnRlcnZhbC4KCgoKPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+UmF3IE1lYW5zIG9mIE92ZXJhbGwgSG9tZSBSYW5nZSBieSBTZXguPC9zcGFuPgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVGFibGUgMi4gR3JvdXAgaG9tZSByYW5nZSBtZWFucyBvZiByYXcgZGF0YSBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LgpgYGB7ciBUYWJsZSAyLiBHcm91cCBNZWFucywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgWVJfR1JQX01lYW5zIDwtIHllYXIgJT4lIAojICAgICAgICAgZ3JvdXBfYnkoRW52aXJvbm1lbnQsU2V4KSAlPiUgCiMgICAgICAgICBzdW1tYXJpc2UoSG9tZV9SYW5nZV8xMDBtY3AgPSBtZWFuKEhvbWVfUmFuZ2VfMTAwbWNwKSkKIyBZUl9HUlBfTWVhbnMKCmxpYnJhcnkoUm1pc2MpCllSX0dSUF9NZWFucyA8LSBzdW1tYXJ5U0UoeWVhciwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV8xMDBtY3AiLCBncm91cHZhcnM9YygiRW52aXJvbm1lbnQiLCJTZXgiKSkKCmthYmxlKFlSX0dSUF9NZWFucywgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnR3JvdXAgTWVhbnMgb2YgT3ZlcmFsbCBIb21lIFJhbmdlcyBhdCBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcycpCmBgYAoKCgpgYGB7ciBGaWcuIDIgUmF3IE92ZXJhbCBNZWFuIEhSLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KCiMgZ2dwbG90KFlSX0dSUF9NZWFucywgYWVzKHg9U2V4LHk9SG9tZV9SYW5nZV8xMDBtY3AsZmlsbD1FbnZpcm9ubWVudCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxwb3NpdGlvbj0nZG9kZ2UnKStnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUhvbWVfUmFuZ2VfMTAwbWNwLVNFLCB5bWF4PUhvbWVfUmFuZ2VfMTAwbWNwK1NFKSwgd2lkdGg9LjEscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpKQoKUmF3LlllYXJIUjwtZ2dwbG90KFlSX0dSUF9NZWFucywgYWVzKHg9U2V4LHk9SG9tZV9SYW5nZV8xMDBtY3AsY29sb3I9RW52aXJvbm1lbnQpKStnZW9tX3BvaW50KHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpK2dndGl0bGUoIk92ZXJhbGwgSG9tZSBSYW5nZXMgYnkgU2V4IikreGxhYigiU2V4IikreWxhYigiQXJlYSAoaGEpIHVzaW5nIDEwMCUgTUNQIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgY29sb3I9ImJsYWNrIiwgc2l6ZT0xNCwgZmFjZT0iYm9sZCIpKQoKUmF3LlllYXJIUiArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKYGBgCiBGaWd1cmUgMi4gUmF3IG92ZXJhbGwgbWVhbiBob21lIHJhbmdlcyBiZXR3ZWVuIGVudmlyb25tZW50IGFuZCBzZXguCiAKIAo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+UmVwZWF0ZWQgbWVhc3VyZXMgQU5PVkEgZm9yIFllYXJseSBIb21lIFJhbmdlcyBieSBTZXguPC9zcGFuPgoKCmBgYHtyIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBIFlFQVIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIEdldCBwLXZhbHVlcyBmcm9tIG1peGVkIG1vZGVsIEYgdmFsdWVzOgpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkocmVhZHIpCnllYXIgPC0gcmVhZF9jc3YoIkdNX0NvbnNvbGlkYXRlZF9CeVllYXIuY3N2IikKCmxtZW1vZGVsLnllYXI8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCsoMXxHaWxhKSxkYXRhID0geWVhcikKc3VtbWFyeShsbWVtb2RlbC55ZWFyKQpgYGAKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+RGlyZWN0aW9uYWwgbWVhbnMgb2YgaG9tZSByYW5nZSB1c2luZyB0aGUgbGVhc3Qgc3F1YXJlIG1lYW5zIGJhc2VkIG9uIHNleCBiZXR3ZWVuIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzLjwvc3Bhbj4KCgpgYGB7ciBEaXJlY3Rpb25hbCBNZWFucywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmxpYnJhcnkob3JkaW5hbCkKbGlicmFyeShsc21lYW5zKQoKUk1tb2QueWVhcjwtbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtOMTAwK1llYXIrU2V4K04xMDArKDF8R2lsYSksZGF0YSA9IHllYXIpCgpSTS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNbW9kLnllYXIsIAogICAgICAgICAgICAgICAgICAgIH4gRW52aXJvbm1lbnQpCiMgUk0ubWFyZ2luYWwKCiMjIENBVEFHT1JJWkUgTFNNIEdSQVBIIEJZIFNFWCBCRVRXRUVOIEVOVklST05NRU5UOgpyZWZSTV9zZXggPC0gbHNtZWFucyhSTW1vZC55ZWFyLCBzcGVjcyA9IGMoIlNleCIsIkVudmlyb25tZW50IikpCiMgcmVmUk1fc2V4CnJlZl9kZlJNX3NleCA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fc2V4KSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQpnNFJNX3NleCA8LSBnZ3Bsb3QocmVmX2RmUk1fc2V4LCBhZXMoeD1TZXgsIHk9bHNtZWFuLGdyb3VwPUVudmlyb25tZW50LCBjb2xvdXI9RW52aXJvbm1lbnQpKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wZF9STSkgKwogIGdlb21fcG9pbnQocG9zaXRpb249cGRfUk0pK3RoZW1lX2NsYXNzaWMoKStnZ3RpdGxlKCJBZGp1c3RlZCBPdmVyYWxsIEhvbWUgUmFuZ2VzIGJ5IFNleCIpK3hsYWIoIlNleCIpK3lsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKIyBSTV9MU01ncmFwaF9zZXg8LXByaW50KGc0Uk1fc2V4KQojIGdnc2F2ZSgib3V0cHV0cy9MU01fWWVhcl9wbG90LnBkZiIpCmc0Uk1fc2V4ICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQojIGdnc2F2ZSgib3V0cHV0cy9MU01fWWVhcl9wbG90LnBkZiIpCmBgYApGaWd1cmUgMy4gQWRqdXN0ZWQgbWVhbnMgb2YgaG9tZSByYW5nZXMgYmV0d2VlbiBlbnZpcm9ubWVudCBhbmQgc2V4LiBBZGp1c3RlZCBmb3Igc2FtcGxlIHNpemUsIHllYXIgYW5kIHNleC4gCgoKUG9zdC1Ib2MgY29tcGFyaXNvbnMgYmV0d2VlbiBzZXhlczoKYGBge3IgQ29tcHMgZm9yIFNleCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrTjEwMCtZZWFyK1NleCtOMTAwKygxfEdpbGEpLGRhdGEgPSB5ZWFyKQpTZXguZW1tLm9hIDwtIGVtbWVhbnMoUk1tb2QueWVhciwgIkVudmlyb25tZW50IiwiU2V4IikKcGFpcnMoU2V4LmVtbS5vYSkKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIFNleCBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGluczoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoU2V4LmVtbS5vYSwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAKCgpUYWJsZSAzLiBEaXJlY3Rpb24gbWVhbnMgb2YgaG9tZSByYW5nZSBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgeWVhciwgc2V4IGFuZCBzYW1wbGUgc2l6ZS4KYGBge3IgVGFibGUgb2YgTGVhc3QgU3F1YXJlIE1lYW5zLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Ka2FibGUocmVmX2RmUk1fc2V4LCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdBZGp1c3RlZCBNZWFucyBvZiBNYWxlIHZzLiBGZW1hbGUgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMuJykgCmBgYAogCiAgCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5TZWFzb25hbCBIb21lIFJhbmdlLjwvc3Bhbj4KCkhvbWUgcmFuZ2UgYW5hbHlzaXMgYnJva2VuIGRvd24gYnkgZml2ZSBzZWFzb25zOyBFbWVyZ2VuY2UsIERyeSwgTW9uc29vbiwgUG9zdCBNb25zb29uLiBUaGUgc3RhcnQgb2YgZW1lcmdlbmNlIHdhcyBkZWZpbmVkIGJ5IHdoZW4gbW92ZW1lbnQgcGF0dGVybnMgaW5jcmVhc2VkIGZyb20gbm9uZS9taW5pbWFsIHRvIHRoZSBzdGFydCBvZiBoaWdoIGFjdGl2aXR5LiBFZmZvcnQgd2FzIHRha2VuIHRvIG1hdGNoIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdG8gdGhlIE93bCBIZWFkIEJ1dHRlcyBlbWVyZ2VuY2UgZGF0ZSBpbnRlcnZhbC4gTW9uc29vbiBzZWFzb24gd2FzIGFkanVzdGVkIHVzaW5nIE5PQUEgY2xpbWF0ZSBkYXRhLiBUaGUgc3RhcnQgb2Ygd2FzIGRlZmluZWQgd2hlbiB0aGUgbWVhbiBkZXcgcG9pbnQgdGVtcGVyYXR1cmVzIG9mIHRocmVlIGNvbnNlY3V0aXZlIGRheXMgd2VyZSBncmVhdGVyIHRoYW4gNTUgZGVncmVlcy4gCgpTY2FsaW5nIGhvbWUgcmFuZ2UgYW5hbHlzZXMgYnkgc2Vhc29uYWwgZXN0aW1hdGVzIHJlZHVjZXMgdGhlIG51bWJlciBvciBsb2NhdGlvbnMgZm9yIGVhY2ggbGl6YXJkLiAxMDAgcGVyY2VudCBNQ1BzIHdlcmUgdXNlZCBmb3Igc2Vhc29uYWwgaG9tZSByYW5nZSBhbmFseXNlcyB0byBhdm9pZCBhbnkgZnVydGhlciByZWR1Y3Rpb24gb2YgbG9jYXRpb25zIGZvciBlYWNoIGVzdGltYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApUYWJsZSA0LiBSYXcgZ3JvdXAgbWVhbnMgb2YgaG9tZSByYW5nZXMgZ3JvdXBlZCBieSBlbnZpcm9ubWVudCBzZWFzb24uCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpzZWFzb25hbDwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0RhdGEuY3N2IikKCmxpYnJhcnkoUm1pc2MpCgpTRUFTX0dSUF9NZWFucyA8LSBzdW1tYXJ5U0Uoc2Vhc29uYWwsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfMTAwbWNwIiwgZ3JvdXB2YXJzPWMoIkVudmlyb25tZW50IiwiU2Vhc29uIiksIG5hLnJtID0gVFJVRSkKCiMgU0VBU19HUlBfTWVhbnMKa2FibGUoU0VBU19HUlBfTWVhbnMsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBHcm91cCBNZWFucyBvZiBTZWFzb25hbCBIb21lIFJhbmdlcyBhdCBTdG9uZSBDYW55b24nKQpgYGAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYHtyIFJhdyBTZWFzb25hbCBIUiwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJhdy5TZWFzSFI8LWdncGxvdChTRUFTX0dSUF9NZWFucywgYWVzKHg9U2Vhc29uLHk9SG9tZV9SYW5nZV8xMDBtY3AsY29sb3I9RW52aXJvbm1lbnQpKStnZW9tX3BvaW50KHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpK2dndGl0bGUoIlJhdyBTZWFzb25hbCBIb21lIFJhbmdlcyIpK3hsYWIoIlNlYXNvbiIpK3lsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKClJhdy5TZWFzSFI8LVJhdy5TZWFzSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpClJhdy5TZWFzSFIrc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9IGMoIkVtZXJnZW5jZSIsIkRyeSIsIk1vbnNvb24iLCJQb3N0X01vbnNvb24iKSkKYGBgCkZpZ3VyZSA0LiBSYXcgc2Vhc29uYWwgaG9tZSByYW5nZSBtZWFucyBncm91cGVkIGJ5IGVudmlyb25tZW50IGFuZCBzZXguIEJvdGggdGhlIG5vbi1zdWJzaWRpemVkIGFuZCBzdWJzaWRpemVkIHBvcHVsYXRpb25zIGZvbGxvdyBzaW1pbGFyIHBhdHRlcm5zLCBidXQgd2l0aCB0aGUgc3Vic2lkaXplZCBtZWFucyBsZXNzIHRoYW4gdGhvc2Ugb2YgdGhlIG5vbi1zdWJzaWRpemVkIHBvcHVsYXRpb24uCgoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPlJlcGVhdGVkIG1lYXN1cmVzIEFOT1ZBIGZvciBTZWFzb25zLjwvc3Bhbj4KCgpUYWJsZSA1LiBBZGp1c3RlZCBzZWFzb25hbCBtZWFucyBvZiBob21lIHJhbmdlIGJldHdlZW4gdGhlIG5vbi1zdWJzaWRpemVkIGFuZCBzdWJzaWRpemVkIHBvcHVsYXRpb25zLiBUaGUgZW1lcmdlbmNlIGFuZCBwb3N0LW1vbnNvb24gc2Vhc29uIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9ucyBzaG93IHNpbWlsYXIgaG9tZSByYW5nZSBzaXplcy4gRGlmZmVyZW5jZXMgaW4gaG9tZSByYW5nZSBzaXplcyBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMgaXMgZHVyaW5nIHRoZSBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucy4KYGBge3IgVGFibGUgNS4gQWRqdXN0ZWQgU2Vhc29uYWwgSFIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsc21lYW4uc2Vhc29uYWw8LXJlYWQuY3N2KCJzZWFzb25hbC5sc21lYW5zX3RhYmxlLmNzdiIpCmthYmxlKGxzbWVhbi5zZWFzb25hbCwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnQWRqdXN0ZWQgU2Vhc29uYWwgTWVhbnMgb2YgSG9tZSBSYW5nZXMgYXQgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMuJykKYGBgCgoKYGBge3IgUk1BTk9WQSBTZWFzb25hbCBIUiwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmxpYnJhcnkobG1lNCkKbGlicmFyeShyZWFkcikKbGlicmFyeShsbWVyVGVzdCkKIyBzZWFzb25hbDwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0RhdGEuY3N2IikKClJNLm1vZC5TZWFzb24gPC0gbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtTZWFzb24rU2V4K04rKDF8R2lsYSksIGRhdGE9c2Vhc29uYWwpCnN1bW1hcnkoUk0ubW9kLlNlYXNvbikKCiMgYW5vdmEoUk0ubW9kLlNlYXNvbikKCiMgIyBtYXJnaW5hbC5zZWFzb24gPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCAKIyAjICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojICMgbWFyZ2luYWwuc2Vhc29uCmBgYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKYGBge3IgQWRqdXN0ZWQgU2Vhc29uYWwgSFIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KG9yZGluYWwpCmxpYnJhcnkobHNtZWFucykKCiMgIyBtYXJnaW5hbC5zZWFzb24gPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCAKIyAjICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojICMgbWFyZ2luYWwuc2Vhc29uCiMgCiMgcmVmLnNlYXNvbjIgPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCBzcGVjcyA9IGMoIlNlYXNvbiIsIkVudmlyb25tZW50IikpCiMgIyByZWYuc2Vhc29uMgojIHJlZl9kZnNlYXNvbjIgPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KHJlZi5zZWFzb24yKSkKIyBwZC5STVMgPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQojIGc0c2Vhc29uMiA8LSBnZ3Bsb3QocmVmX2Rmc2Vhc29uMiwgYWVzKHg9U2Vhc29uLCB5PWxzbWVhbixncm91cD1FbnZpcm9ubWVudCwgY29sb3VyPUVudmlyb25tZW50KSkrCiMgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wZC5STVMpICsKIyAgIGdlb21fbGluZShwb3NpdGlvbj1wZC5STVMpKwojICAgZ2VvbV9wb2ludChwb3NpdGlvbj1wZC5STVMpK3RoZW1lX2NsYXNzaWMoKStnZ3RpdGxlKCJBZGp1c3RlZCBTZWFzb25hbCBIb21lIFJhbmdlcyIpK3hsYWIoIlNlYXNvbiIpK3lsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKIyAjIExTTWdyYXBoc2Vhc29uPC1wcmludChnNHNlYXNvbikKIyBnNHNlYXNvbjI8LWc0c2Vhc29uMiArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCmc0c2Vhc29uMitzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz0gYygiRW1lcmdlbmNlIiwiRHJ5IiwiTW9uc29vbiIsIlBvc3RfTW9uc29vbiIpKQojIGdnc2F2ZSgib3V0cHV0cy9MU01fU2Vhc29uLnBkZiIpCmBgYApGaWd1cmUgNS4gQWRqdXN0ZWQgc2Vhc29uYWwgaG9tZSByYW5nZXMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zIGFmdGVyIGJlaW5nIGFkanVzdGVkIGZvciBzZWFzb24sIHNleCBhbmQgc2FtcGxlIHNpemUgYnkgUk1BTk9WQS4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVGFibGUgNi4gTWVhbiBpbmRpdmlkdWFsIHNlYXNvYW5sIGhvbWUgcmFuZ2VzIHBvb2xlZCBmcm9tIHRoZSBlbnRpcmUgc3R1ZHkgcGVyaW9kLiBNaXNzaW5nIHZhbHVlcyBhcmUgZGVwaWN0ZWQgd2hlcmUgbm8gbG9jYXRpb25zIGZvciB0aGF0IGFuaW1hbCBkdXJpbmcgdGhhdCBwZXJpb2Qgd2VyZSBzdWNjZXNzZnVsbC4KYGBge3IgVGFibGUgNi4gTWVhbiBJbmQuIFNlYXNvbmFsIEhSLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KU2Vhcy5JbmQuTWVhbnM8LXJlYWQuY3N2KCJTZWFzb25hbCBIUiBUYWJsZS5jc3YiKQprYWJsZShTZWFzLkluZC5NZWFucywgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnU2Vhc29uYWwgSW5kaXZpZHVhbCBIb21lIFJhbmdlcy4nKQpgYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPkdpbGEgTW9uc3RlciBIb21lIFJhbmdlIE92ZXJsYXAgb2YgMTAwJSBNQ1BzLjwvc3Bhbj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIyBTZXQgcHJvamVjdGlvbiBmb3IgbWFwcGluZzoKQ1JTLlNDPC1DUlMoIitwcm9qPXV0bSArem9uZT0xMiArZWxscHM9V0dTODQgK3VuaXRzPW0gK25vX2RlZnMiKQpgYGAKCmBgYHtyIEludGVyYWN0aXZlIE1hcCBvZiAxMDAlIE1DUHMsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIyBDcmVhdGUgTUNQIFBvbHlnb24gZm9yIG1hcHZpZXcoKToKTTY3X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTY3L002NyAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNNjlfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NNjkvTTY5IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0yNTVfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMjU1L00yNTUgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00yMTUvTTIxNSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMTRfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMTQvTTE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMTE5L00xMTkgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xMTIvTTExMiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQoKRjY2X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjY2L0Y2NiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMzZfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMzYvRjM2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMjUyL0YyNTIgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjIxNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YyMTQvRjIxNCAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMjAwX01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjIwMC9GMjAwIC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTQ3L0YxNDcgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0Nl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxNDYvRjE0NiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTM3X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjEzNy9GMTM3IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMzVfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTM1L0YxMzUgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxMTQvRjExNCAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTA0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjEwNC9GMTA0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCgpNYWxlLk1DUCA8LSByYmluZChNNjdfTUNQLE02OV9NQ1AsTTI1NV9NQ1AsTTIxNV9NQ1AsTTE0X01DUCxNMTE5X01DUCxNMTEyX01DUCkKCkZlbWFsZS5NQ1AgPC0gcmJpbmQoRjY2X01DUCxGMzZfTUNQLEYyNTJfTUNQLEYyMTRfTUNQLEYyMDBfTUNQLEYxNDdfTUNQLEYxNDZfTUNQLEYxMzdfTUNQLAogICAgICAgICAgICAgICAgICAgIEYxMzVfTUNQLEYxMTRfTUNQLEYxMDRfTUNQKQoKbWFwdmlld09wdGlvbnMoYmFzZW1hcHMgPSBjKCJPcGVuU3RyZWV0TWFwIiwiRXNyaS5Xb3JsZEltYWdlcnkiLCJPcGVuVG9wb01hcCIpLAogICAgICAgICAgICAgICBuYS5jb2xvciA9ICJtYWdlbnRhIiwKICAgICAgICAgICAgICAgbGF5ZXJzLmNvbnRyb2wucG9zID0gInRvcGxlZnQiKQoKbWFwdmlldyhNYWxlLk1DUCwgbGVnZW5kPUYsIHpjb2w9ImlkIiwgY29sLnJlZ2lvbnMgPSBjKCJibHVlIiksIGFscGhhLnJlZ2lvbnM9MC4zKSArIAogIG1hcHZpZXcoRmVtYWxlLk1DUCwgbGVnZW5kPUYsIHpjb2wgPSAiaWQiLCBjb2wucmVnaW9ucyA9IGMoInJlZCIpLCBhbHBoYS5yZWdpb25zPTAuMykKYGBgCkZpZ3VyZSA0LiBIb21lIFJhbmdlIG92ZXJsYXAgYnkgc2V4IG9mIDEwMCUgTUNQcyBhdCBTdG9uZSBDYW55b24uIFJlZCBwb2x5Z29ucyByZXByZXNlbnQgZmVtYWxlIGxpemFyZHMsIGFuZCBibHVlIHJlcHJlc2VudHMgbWFsZSBsaXphcmRzLiAKClRoZSBTdG9uZSBDYW55b24gcG9wdWxhdGlvbiBzZWVtcyB0byBleGhpYml0IGdyZWF0ZXIgZmVtYWxlLWZlbWFsZSBvdmVybGFwIGFzIHdlbGwgYXMgY29uc2lkZXJhYmxlIG92ZXJsYXAgb2YgbWFsZS1mZW1hbGUgaG9tZSByYW5nZXMuIFRoZXJlIGFwcGVhcnMgdG8gYmUgbGltaXRlZCBtYWxlLW1hbGUgb3ZlcmxhcCwgd2l0aCBvY2N1cmFuY2UgaGFwcGVuaW5nIGluIG9ubHkgdHdvIG1hbGUtbWFsZSBob21lIHJhbmdlIHBvbHlnb25zLiBUaGlzIGZpbmRpbmcgaXMgaW4gY29udHJhc3QgdG8gdGhlIE93bCBIZWFkIGJ1dHRlcyBzdHVkeSB3aGljaCByZXZlYWxlZCB0aGF0IHRoZXJlIHdhcyBhIGxhcmdlIGRlZ3JlZSBvZiBvdmVybGFwIGFtb25nIG1hbGUtZmVtYWxlIGFuZCBtYWxlLW1hbGUgb3ZlcmxhcHMgKFRhYmxlIDQpLiBHaWxsYXJkbyBjb25jbHVkZWQgdGhhdCwgaW4gdGhlaXIgc3R1ZHksIHRoZSBoaWdoIGRlZ3JlZSBvZiBvdmVybGFwIGluIG1hbGVzLW1hbGVzIGludGVyYWN0aW9ucyBtYXkgYmUgZHVlIHRvIGhhdmluZyBsYXJnZXIgaG9tZSByYW5nZXMgZm9yIG1hdGUgc2VhcmNoaW5nIGFjdGl2aXRpZXMuIE1hbGVzIG1heSBoYXZlIGFuZCBpbmNyZWFzZWQgaG9tZSByYW5nZSBzaXplIHRvIG1heGltaXplIHRoZWlyIGFjY2VzcyB0byBtdWx0aXBsZSBmZW1hbGVzLiBTaGUgY29uY2x1ZGVkIHRoYXQgdGhlIGxhY2sgb2YgZmVtYWxlLWZlbWFsZSBvdmVybGFwIG1heSBiZSBkdWUgdG8gc21hbGxlciBob21lIHJhbmdlIHNpemVzLiAKCkF0IFN0b25lIENhbnlvbiwgbWFsZXMgaGF2ZSByZWR1Y2VkIGhvbWUgcmFuZ2Ugc2l6ZXMgKFRhYmxlIDI7IEZpZy4gMikuIEhvd2V2ZXIsIG1hbGVzIHN0aWxsIHJldGFpbiBob21lIHJhbmdlIG92ZXJsYXAgd2l0aCBtdWx0aXBsZSBmZW1hbGVzIHdoaWxlIGhhdmluZyByZWR1Y2VkIGNvbnRhY3Qgd2l0aCBvdGhlciBtYWxlcy4gVGhpcyBtYXkgYmUgaW4gcmVzcG9uc2UgdG8gbnV0cmllbnQgc3Vic2lkaWVzIHRoYXQgcmVkdWNlIHRoZSBuZWVkIHRvIGhhdmUgZXhwYW5kZWQgaG9tZSByYW5nZSBzaXplcyBmb3IgZm9yYWdpbmcgYWN0aXZpdGllcyBmb3IgYm90aCBtYWxlcyBhbmQgZmVtYWxlcy4gVGhlcmUgbWF5IGFsc28gYmUgYSBoaWdoZXIgZGVuc2l0eSBvZiBmZW1hbGVzIGFzIGEgcmVzcG9uc2UgdG8gcmVzb3VyY2UgYXZhaWxhYmlsaXR5IGFuZCByZWR1Y2VkIHJhbmdlIHJlcXVpcmVtZW50cy4gTWFsZXMgYXJlIG5vdCBmb3JjZWQgdG8gZXhwYW5kIGhvbWUgcmFuZ2VzIGZvciBtYXRlIHNlYXJjaGluZyB0byB0aGUgZXh0YW50IHRoYXQgaW5kaXZpZHVhbHMgYXQgT3dsIEhlYWQgQnV0dGVzIG1heSBiZSBzdWJqZWN0IHRvLiAKClRhYmxlIDQuIEhvbWUgcmFuZ2Ugb3ZlcmxhcCBvZiBHaWxhIE1vbnN0ZXJzIGF0IHRoZSBudXRyaWVudCBzdWJzaWRpemVkIHNpdGUuIE1hbGUtbWFsZSBvdmVybGFwcyBvbmx5IG9jY3VyZWQgYmV0d2VlbiB0d28gcGFpcnMgb2YgbWFsZXM6IE0xNC1NNjkgYW5kIE0xMTktTTIxNSBhdCAwLjUgaGEuIGFuZCAxOS41IGhhLiByZXNwZWN0aXZlbHkgYW5kIHdlcmUgdGhlcmVmb3JlIG5vdCBpbmNsdWRlZCBpbiB0aGUgdGFibGUuIApgYGB7ciBUYWJsZSA0LiBIUiBPdmVybGFwLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KT0xfVGFibGU8LXJlYWQuY3N2KCJPdmVyTGFwX1RhYmxlLmNzdiIpCgprYWJsZShPTF9UYWJsZSwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnSG9tZSByYW5nZSBvdmVybGFwIG9mIFN0b25lIENhbnlvbiBHaWxhIE1vbnN0ZXJzIHVzaW5nIDEwMCUgTUNQcy4nKQpgYGAKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+R2lsYSBNb25zdGVyIEhvbWUgUmFuZ2UgU2hpZnRzIG9mIDEwMCUgTUNQcy48L3NwYW4+CgpgYGB7ciBGaWcgNS4gWWVhcmx5IEhSIFNoaWZ0cywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMjIENyZWF0ZSBNQ1AgcG9seWdvbnMgYnkgWUVBUjoKTTIxNV9tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMjE1X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMDRfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTA0LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEwNF9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMDQvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC4wNzwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi8yMDA3IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyLzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNNjlfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NNjkvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNNjlfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NNjkvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKIyMgRm9ydGlmeSBtY3AgcG9seWdvbnMgZm9yIGdncGxvdDIgKllFQVIqOgpGMTA0X21jcC4wOFQgPC0gZm9ydGlmeShGMTA0X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjEwNF9tY3AuMDlUIDwtIGZvcnRpZnkoRjEwNF9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjA4VCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4wOVQgPC0gZm9ydGlmeShGMTE0X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMTBUIDwtIGZvcnRpZnkoRjExNF9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjExVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4xMlQgPC0gZm9ydGlmeShGMTE0X21jcC4xMiwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuMDlUIDwtIGZvcnRpZnkoRjEzN19tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLjEwVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC4xMVQgPC0gZm9ydGlmeShGMTM3X21jcC4xMSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMDlUIDwtIGZvcnRpZnkoRjE0N19tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjEwVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4xMVQgPC0gZm9ydGlmeShGMTQ3X21jcC4xMSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMTJUIDwtIGZvcnRpZnkoRjE0N19tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMDhUIDwtIGZvcnRpZnkoRjM2X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjM2X21jcC4wOVQgPC0gZm9ydGlmeShGMzZfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjEwVCA8LSBmb3J0aWZ5KEYzNl9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMTFUIDwtIGZvcnRpZnkoRjM2X21jcC4xMSwgcmVnaW9uID0gImlkIikKRjM2X21jcC4xMlQgPC0gZm9ydGlmeShGMzZfbWNwLjEyLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLjA4VCA8LSBmb3J0aWZ5KEY2Nl9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuMDlUIDwtIGZvcnRpZnkoRjY2X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjY2X21jcC4xMFQgPC0gZm9ydGlmeShGNjZfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC4wOFQgPC0gZm9ydGlmeShNMTE5X21jcC4wOCwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuMDlUIDwtIGZvcnRpZnkoTTExOV9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLjEwVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC4wN1QgPC0gZm9ydGlmeShNMTEyX21jcC4wNywgcmVnaW9uID0gImlkIikKTTExMl9tY3AuMDlUIDwtIGZvcnRpZnkoTTExMl9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLjEwVCA8LSBmb3J0aWZ5KE0xMTJfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNNjlfbWNwLjA5VCA8LSBmb3J0aWZ5KE02OV9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCk02OV9tY3AuMTBUIDwtIGZvcnRpZnkoTTY5X21jcC4xMCwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuMTFUIDwtIGZvcnRpZnkoTTIxNV9tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLjEyVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLjEyLCByZWdpb24gPSAiaWQiKQoKbWNwLnNoaWZ0LlRFU1Q0IDwtIGdncGxvdCgpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTA0X21jcC4wOFQsIGFlcyh4PUYxMDRfbWNwLjA4VCRsb25nLCB5PUYxMDRfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMDRfbWNwLjA5VCwgYWVzKHg9RjEwNF9tY3AuMDlUJGxvbmcsIHk9RjEwNF9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMDhULCBhZXMoeD1GMTE0X21jcC4wOFQkbG9uZywgeT1GMTE0X21jcC4wOFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4wOVQsIGFlcyh4PUYxMTRfbWNwLjA5VCRsb25nLCB5PUYxMTRfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjEwVCwgYWVzKHg9RjExNF9tY3AuMTBUJGxvbmcsIHk9RjExNF9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMTFULCBhZXMoeD1GMTE0X21jcC4xMVQkbG9uZywgeT1GMTE0X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4xMlQsIGFlcyh4PUYxMTRfbWNwLjEyVCRsb25nLCB5PUYxMTRfbWNwLjEyVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLjA5VCwgYWVzKHg9RjEzN19tY3AuMDlUJGxvbmcsIHk9RjEzN19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuMTBULCBhZXMoeD1GMTM3X21jcC4xMFQkbG9uZywgeT1GMTM3X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC4xMVQsIGFlcyh4PUYxMzdfbWNwLjExVCRsb25nLCB5PUYxMzdfbWNwLjExVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjA5VCwgYWVzKHg9RjE0N19tY3AuMDlUJGxvbmcsIHk9RjE0N19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEwVCwgYWVzKHg9RjE0N19tY3AuMTBUJGxvbmcsIHk9RjE0N19tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjExVCwgYWVzKHg9RjE0N19tY3AuMTFUJGxvbmcsIHk9RjE0N19tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEyVCwgYWVzKHg9RjE0N19tY3AuMTJUJGxvbmcsIHk9RjE0N19tY3AuMTJUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMDhULCBhZXMoeD1GMzZfbWNwLjA4VCRsb25nLCB5PUYzNl9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4wOVQsIGFlcyh4PUYzNl9tY3AuMDlUJGxvbmcsIHk9RjM2X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjEwVCwgYWVzKHg9RjM2X21jcC4xMFQkbG9uZywgeT1GMzZfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMTFULCBhZXMoeD1GMzZfbWNwLjExVCRsb25nLCB5PUYzNl9tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4xMlQsIGFlcyh4PUYzNl9tY3AuMTJUJGxvbmcsIHk9RjM2X21jcC4xMlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLjA4VCwgYWVzKHg9RjY2X21jcC4wOFQkbG9uZywgeT1GNjZfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuMDlULCBhZXMoeD1GNjZfbWNwLjA5VCRsb25nLCB5PUY2Nl9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC4xMFQsIGFlcyh4PUY2Nl9tY3AuMTBUJGxvbmcsIHk9RjY2X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTEpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTE5X21jcC4wOFQsIGFlcyh4PU0xMTlfbWNwLjA4VCRsb25nLCB5PU0xMTlfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExOV9tY3AuMDlULCBhZXMoeD1NMTE5X21jcC4wOVQkbG9uZywgeT1NMTE5X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTlfbWNwLjEwVCwgYWVzKHg9TTExOV9tY3AuMTBUJGxvbmcsIHk9TTExOV9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTEyX21jcC4wN1QsIGFlcyh4PU0xMTJfbWNwLjA3VCRsb25nLCB5PU0xMTJfbWNwLjA3VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExMl9tY3AuMDlULCBhZXMoeD1NMTEyX21jcC4wOVQkbG9uZywgeT1NMTEyX21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTJfbWNwLjEwVCwgYWVzKHg9TTExMl9tY3AuMTBUJGxvbmcsIHk9TTExMl9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTMpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU02OV9tY3AuMDlULCBhZXMoeD1NNjlfbWNwLjA5VCRsb25nLCB5PU02OV9tY3AuMDlUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1NNjlfbWNwLjEwVCwgYWVzKHg9TTY5X21jcC4xMFQkbG9uZywgeT1NNjlfbWNwLjEwVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTIxNV9tY3AuMTFULCBhZXMoeD1NMjE1X21jcC4xMVQkbG9uZywgeT1NMjE1X21jcC4xMVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU0yMTVfbWNwLjEyVCwgYWVzKHg9TTIxNV9tY3AuMTJUJGxvbmcsIHk9TTIxNV9tY3AuMTJUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgdGhlbWVfYncoKSArbGFicyh4PSJFYXN0aW5nIChtKSIsIHk9Ik5vcnRoaW5nIChtKSIsdGl0bGU9IlllYXJseSBIb21lIFJhbmdlIFNoaWZ0cyIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkKCm1jcC5zaGlmdC5URVNUNApgYGAKCgpgYGB7ciBGaWcuIDYuIFNlYXNvbmFsIEhSIFNoaWZ0cywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMjIENyZWF0ZSBNQ1AgcG9seWdvbnMgYnkgU0VBU09OOgpNMjE1X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMjE1X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKTTExMl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyL0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCk0xMTlfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMTE0X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYxMzdfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjE0N19tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMjUyX21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMjUyL0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMjUyX21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMjUyX21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYzNl9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkY2Nl9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCiMjIEZvcnRpZnkgbWNwIHBvbHlnb25zIGZvciBnZ3Bsb3QyICpTRUFTT04qOgpNMjE1X21jcC5FTVQgPC0gZm9ydGlmeShNMjE1X21jcC5FTSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuRFJZVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuTU9OVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKCk0xMTJfbWNwLkRSWVQgPC0gZm9ydGlmeShNMTEyX21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLk1PTlQgPC0gZm9ydGlmeShNMTEyX21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLlBNVCA8LSBmb3J0aWZ5KE0xMTJfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKTTExOV9tY3AuRFJZVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuTU9OVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuUE1UIDwtIGZvcnRpZnkoTTExOV9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTE0X21jcC5FTVQgPC0gZm9ydGlmeShGMTE0X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuUE1UIDwtIGZvcnRpZnkoRjExNF9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTM3X21jcC5FTVQgPC0gZm9ydGlmeShGMTM3X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuUE1UIDwtIGZvcnRpZnkoRjEzN19tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTQ3X21jcC5FTVQgPC0gZm9ydGlmeShGMTQ3X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuUE1UIDwtIGZvcnRpZnkoRjE0N19tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMjUyX21jcC5FTVQgPC0gZm9ydGlmeShGMjUyX21jcC5FTSwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuTU9OVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuUE1UIDwtIGZvcnRpZnkoRjI1Ml9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMzZfbWNwLkVNVCA8LSBmb3J0aWZ5KEYzNl9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYzNl9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLk1PTlQgPC0gZm9ydGlmeShGMzZfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjM2X21jcC5QTVQgPC0gZm9ydGlmeShGMzZfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjY2X21jcC5FTVQgPC0gZm9ydGlmeShGNjZfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLkRSWVQgPC0gZm9ydGlmeShGNjZfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjY2X21jcC5NT05UIDwtIGZvcnRpZnkoRjY2X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuUE1UIDwtIGZvcnRpZnkoRjY2X21jcC5QTSwgcmVnaW9uID0gImlkIikKCm1jcC5zaGlmdC5URVNUNSA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuRU1ULCBhZXMoeD1GMTE0X21jcC5FTVQkbG9uZywgeT1GMTE0X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLkRSWVQsIGFlcyh4PUYxMTRfbWNwLkRSWVQkbG9uZywgeT1GMTE0X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLk1PTlQsIGFlcyh4PUYxMTRfbWNwLk1PTlQkbG9uZywgeT1GMTE0X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuUE1ULCBhZXMoeD1GMTE0X21jcC5QTVQkbG9uZywgeT1GMTE0X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC5FTVQsIGFlcyh4PUYxMzdfbWNwLkVNVCRsb25nLCB5PUYxMzdfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuRFJZVCwgYWVzKHg9RjEzN19tY3AuRFJZVCRsb25nLCB5PUYxMzdfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuTU9OVCwgYWVzKHg9RjEzN19tY3AuTU9OVCRsb25nLCB5PUYxMzdfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC5QTVQsIGFlcyh4PUYxMzdfbWNwLlBNVCRsb25nLCB5PUYxMzdfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLkVNVCwgYWVzKHg9RjE0N19tY3AuRU1UJGxvbmcsIHk9RjE0N19tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5EUllULCBhZXMoeD1GMTQ3X21jcC5EUllUJGxvbmcsIHk9RjE0N19tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5NT05ULCBhZXMoeD1GMTQ3X21jcC5NT05UJGxvbmcsIHk9RjE0N19tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLlBNVCwgYWVzKHg9RjE0N19tY3AuUE1UJGxvbmcsIHk9RjE0N19tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5FTVQsIGFlcyh4PUYyNTJfbWNwLkVNVCRsb25nLCB5PUYyNTJfbWNwLkVNVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5EUllULCBhZXMoeD1GMjUyX21jcC5EUllUJGxvbmcsIHk9RjI1Ml9tY3AuRFJZVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5NT05ULCBhZXMoeD1GMjUyX21jcC5NT05UJGxvbmcsIHk9RjI1Ml9tY3AuTU9OVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5QTVQsIGFlcyh4PUYyNTJfbWNwLlBNVCRsb25nLCB5PUYyNTJfbWNwLlBNVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC5FTVQsIGFlcyh4PUYzNl9tY3AuRU1UJGxvbmcsIHk9RjM2X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuRFJZVCwgYWVzKHg9RjM2X21jcC5EUllUJGxvbmcsIHk9RjM2X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuTU9OVCwgYWVzKHg9RjM2X21jcC5NT05UJGxvbmcsIHk9RjM2X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC5QTVQsIGFlcyh4PUYzNl9tY3AuUE1UJGxvbmcsIHk9RjM2X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLkVNVCwgYWVzKHg9RjY2X21jcC5FTVQkbG9uZywgeT1GNjZfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5EUllULCBhZXMoeD1GNjZfbWNwLkRSWVQkbG9uZywgeT1GNjZfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5NT05ULCBhZXMoeD1GNjZfbWNwLk1PTlQkbG9uZywgeT1GNjZfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLlBNVCwgYWVzKHg9RjY2X21jcC5QTVQkbG9uZywgeT1GNjZfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIHRoZW1lX2J3KCkgK2xhYnMoeD0iRWFzdGluZyAobSkiLCB5PSJOb3J0aGluZyAobSkiLHRpdGxlPSJTZWFzb25hbCBIb21lIFJhbmdlIFNoaWZ0cyIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkKCm1jcC5zaGlmdC5URVNUNQoKYGBgCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgUHJvcG9ydGlvbiBvZiBSZWZ1Z2UgVXNlLjwvc3Bhbj4KCgpgYGB7ciBNaXhlZCBFZmZlY3RzIFJNQU5PVkEgUmVmdWdlIFVzZSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJlZnVnaWEgPC0gcmVhZC5jc3YoJy4vUmVmdWdlX1VzZS9SZWZ1Z2lhX0lucHV0LmNzdicpCgpSZWZfSW5kPC1sbWVyKEFWR19QUk9QX1lSX0xJWn5DT1ZFUlRZUEUrU0VBU09OK1NFWCtZRUFSK0NPVkVSVFlQRSpTRUFTT04rKDF8TElaQVJETlVNQkVSKSxkYXRhID0gUmVmdWdpYSkKc3VtbWFyeShSZWZfSW5kKQpgYGAKCmBgYHtyIEFOT1ZBIFRhYmxlIGZvciBNRSBSTUFOT1ZBIFJlZnVnZSBVc2UsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSZWZfSW5kKQpgYGAKClRoZXJlIHdhcyBubyBlZmZlY3Qgb2YgeWVhciBvbiByZWZ1Z2UgdXNlLiBQZXJmb3JtZWQgTWl4ZWQgRWZmZWN0cyBSTUFOT1ZBIGZvciBlYWNoIHJlZnVnZSB0eXBlLCB0aGVuIGNvbmR1Y3RlZCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgZWFjaCByZWZ1Z2UgdHlwZSBhY3Jvc3Mgc2Vhc29ucy4gRm9yIHBvc3QtaG9jIHBhcml3aXNlIGNvbXBhcmlzb25zLCB1c2VkIEJvbmZlcm9ubmkgYWRqdXN0ZWQgcC12YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKClJ1biBSTUFOT1ZBIGZvciBlYWNoIHJlZnVnZSB0eXBlIGFuZCBwYWlyd2lzZSBjb21wYXJpc29ucyBhY3Jvc3MgZWFjaCBzZWFzb246CgpSb2NrcwpgYGB7ciBSTUFOT1ZBIGZvciBSZWZ1Z2UgVHlwZTogUm9ja3MsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIFJlZi5FbWVyZ2VuY2UgPC0gc2xpY2UoKQpSb2NrcyA8LSBzdWJzZXQoUmVmdWdpYSwgQ09WRVJUWVBFID09ICJSb2NrcyIpCiMgVmlldyhSb2NrcykKClJvY2tzX21vZDwtbG1lcihTRUFTX1BST1BfTElaflNFQVNPTitTRVgrU0VBU09OKlNFWCsoMXxMSVpBUkROVU1CRVIpLGRhdGEgPSBSb2NrcykKc3VtbWFyeShSb2Nrc19tb2QpCmFub3ZhKFJvY2tzX21vZCkKYGBgCgpgYGB7ciBTZWFzb25hbCBQYWlyd2lzZSBDb21wLjogUm9ja3MsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphdHRhY2goUm9ja3MpCgpwYWlyd2lzZS50LnRlc3QoQVZHX1BST1BfWVJfTElaLFNFQVNPTiwgcC5hZGogPSAiYm9uZmVycm9uaSIpCmBgYAoKCgpCdXJyb3cKYGBge3IgUk1BTk9WQSBmb3IgUmVmdWdlIFR5cGU6IEJ1cnJvdywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CkJ1cnJvdyA8LSBzdWJzZXQoUmVmdWdpYSwgQ09WRVJUWVBFID09ICJCdXJyb3ciKQojIFZpZXcoQnVycm93KQoKQnVycm93Lm1vZDwtbG1lcihTRUFTX1BST1BfTElaflNFQVNPTitTRVgrU0VBU09OKlNFWCsoMXxMSVpBUkROVU1CRVIpLGRhdGEgPSBCdXJyb3cpCnN1bW1hcnkoQnVycm93Lm1vZCkKYW5vdmEoQnVycm93Lm1vZCkKYGBgCgpgYGB7ciBTZWFzb25hbCBQYWlyd2lzZSBDb21wLjogQnVycm93LCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KYXR0YWNoKEJ1cnJvdykKCnBhaXJ3aXNlLnQudGVzdChBVkdfUFJPUF9ZUl9MSVosU0VBU09OLCBwLmFkaiA9ICJib25mZXJyb25pIikKYGBgCgoKCk1pZGRlbgpgYGB7ciBSTUFOT1ZBIGZvciBSZWZ1Z2UgVHlwZTogTWlkZGVuLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KTWlkZGVuIDwtIHN1YnNldChSZWZ1Z2lhLCBDT1ZFUlRZUEUgPT0gIk1pZGRlbiIpCiMgVmlldyhNaWRkZW4pCgpNaWRkZW4ubW9kPC1sbWVyKFNFQVNfUFJPUF9MSVp+U0VBU09OK1NFWCtTRUFTT04qU0VYKygxfExJWkFSRE5VTUJFUiksZGF0YSA9IE1pZGRlbikKc3VtbWFyeShNaWRkZW4ubW9kKQphbm92YShNaWRkZW4ubW9kKQpgYGAKCmBgYHtyIFNlYXNvbmFsIFBhaXJ3aXNlIENvbXAuOiBNaWRkZW4sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphdHRhY2goTWlkZGVuKQoKcGFpcndpc2UudC50ZXN0KEFWR19QUk9QX1lSX0xJWixTRUFTT04sIHAuYWRqID0gImJvbmZlcnJvbmkiKQpgYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkFuYWx5c2VzIHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgYW4gZWZmZWN0IG9mIHNlYXNvbiBhY3Jvc3MgYWxsIHRocmVlIHJlZnVnZSB0eXBlcywgYnV0IHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIG9mIHNleCBhbmQgc2Vhc29uIG9uIGNob3NlbiByZWZ1Z2UgdHlwZXMgKFRhYmxlcyA1LTcpLiBBZnRlciBwZXJmb3JtaW5nIHBvc3QtaG9jIHBhaXJ3aXNlIGNvbXBhcmlzb25zLCB0aGUgcHJvcG9ydGlvbiBvZiByZWZ1Z2UgdXNlIGZvciByb2NrcyB3YXMgaGlnaGVyIGluIGVtZXJnZW5jZSAoMC4zNykuIFRoaXMgbWF5IGJlIGR1ZSB0byBHaWxhIE1vbnN0ZXJzIHByZWZlcmluZyBtb3JlIHJvY2t5IHJlZnVnaWEgZm9yIGhpYmVybmFjdWxhIHVzZS4gSG93ZXZlciwgbGl6YXJkcyB1c2VkIHJvY2t5IHJlZnVnaWEgaW4gc21hbGxlciBwcm9wb3J0aW9ucyB0aHJvdWdodCB0aGUgZHJ5LCBtb25zb29uIGFuZCBwb3N0LW1vbnNvb24gc2Vhc29ucyhUYWJsZSA1KS4gRHVyaW5nIHRoZSBkcnkgc2Vhc29uIEdpbGEgTW9uc3RlcnMgZXhoaWJpdGVkIGEgaGlnaGVyIHByb3BvcnRpb24gb2YgcmVmdWdlIHVzZSBpbiBidXJyb3dzICgwLjI2KSwgYnV0IG1haW50ZWQgYWJvdXQgdGhlIHNhbWUgb2YgYnVycm93IHVzZSB0aHJvdWcgdGhlIG1vbnNvb24gc2Vhc29uIChUYWJsZSA2LikuIEdpbGEgTW9uc3RlcnMgY2hvc2UgbWlkZGVuIHJlZnVnZSB0eXBlcyBpbiBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucyAoMC4yMSBhbmQgMC4yMyByZXNwZWN0aXZlbHkpLCB3aXRoIHRoZSBtYWpvcml0eSBtaWRkZW4gc2VsZWN0aW9uIGluIHRoZSBtb25zb29uLiBIb3dldmVyLCBib3RoIHRoZSBidXJyb3cgYW5kIG1pZGRlbiByZWZ1Z2UgdHlwZXMgd2VyZSBib3RoIHVzZWQgdGhyb3VnaHRvdXQgdGhlIGRyeSBhbmQgbW9uc29vbiBzZWFzb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVGFibGUgNS4gTWVhbiBwcm9wb3J0aW5hbCB1c2Ugb2YgcmVmdWdlIHR5cGVzIGFjcm9zcyBlYXNjaCBzZWFzb24gYnkgc2V4LgpgYGB7ciBUYWJsZSA1LiBQcm9wb3J0aW5hbCBSZWZ1Z2UgVXNlLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUmVmdWdlLlByb3A8LXJlYWQuY3N2KCIuL1JlZnVnZV9Vc2UvUmVmdWdlIFByb3AgVGFibGUuY3N2IikKCmthYmxlKFJlZnVnZS5Qcm9wLCBmb3JtYXQgPSAicGFuZG9jIiwgbG9uZ3RhYmxlPVRSVUUsIGNhcHRpb24gPSAnUmVmdWdlIFVzZSBQcm9wb3J0aW9uYWwgTWVhbnMgYnkgU2V4IGFuZCBTZWFzb24nKQpgYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlIDYuIFBvc3QtSG9jIHBhaXJ3aXNlIGNvbXBhcmlzb25zIG9mIHJlZnVnZSB0eXBlcyBiZXR3ZWVuIHNlYXNvbnMuCmBgYHtyIFRhYmxlIDYuIFBvc3QgSG9jIFJlZnVnZSBDb21wcyBieSBTZWFzb24sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSZWZ1Z2UuU2lnPC1yZWFkLmNzdigiLi9SZWZ1Z2VfVXNlL1JlZnVnZSBTaWcgVGFibGUuY3N2IikKCmthYmxlKFJlZnVnZS5TaWcsIGZvcm1hdCA9ICJwYW5kb2MiLCBsb25ndGFibGU9VFJVRSxjYXB0aW9uID0gJ1Bvc3QgSG9jIFBhaXJ3aXNlIENvbXBhcmlzb25zIG9mIFJlZnVnZSBUeXBlcycpCmBgYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgNy4gQU5PVkEgdGFibGUgYWZ0ZXIgY29uZHVjdGluZyBNaXhlZCBFZmZlY3RzIFJNQU5PVkEgZm9yIGVhY2ggcmVmdWdlIHR5cGUgYWNyb3NzIHNlYXNvbnMuCmBgYHtyIFJNIEFOT1ZBIHRhYmxlIGZvciBSZWZ1Z2UgVXNlLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUk0udGFibGU8LXJlYWQuY3N2KCIuL1JlZnVnZV9Vc2UvUk0gQU5PVkEgdGFibGUgUmVmdWdlLmNzdiIpCgprYWJsZShSTS50YWJsZSwgZm9ybWF0ID0gInBhbmRvYyIsIGxvbmd0YWJsZT1UUlVFLGNhcHRpb24gPSAnQU5PVkEgVGFibGUgb2YgUk0gQW5hbHlzaXMgZm9yIFJlZnVnZSBVc2UnKQpgYGAKCg==